// false和new Boolean(false)的区别
(function () {
    var bool = new Boolean(false);
    /* 
    这一行永远也执行不到，因为这里的if判断的是这个对象是否为undefined或者null，而不是里面具体的值，判断这个对象是否存在
    */
    if (!bool) {
        console.log("this is false");
    }
})();

// 手动包装和自动包装
/* 
其实对于10这个数字，当我们调用他上面的方式的时候就已经自动包装。
如果想要手动包装，可以使用Object()方法
*/
(function () {
    var a = "ddd";
    var b = new String(a);
    var c = Object(a);

    console.log(typeof a);
    console.log(typeof b);
    console.log(typeof c);

    console.log(b instanceof String);
    console.log(c instanceof String); //这个地方其实已经自动调用了new String

    console.log(Object.prototype.toString.call(b));
    console.log(Object.prototype.toString.call(c));
})();

// 如何进行拆包
(function () {
    var str = new String("dddd");
    console.log(str); //这个方法只能将这个对象打印出来
    console.log(str.valueOf()); //这个将转换后的值打印出来

    /* 
    当然，js也可以进行自动拆包，当代码中明确需要原始值得时候，就会自动拆包
    */
    var str1 = str + "";
    console.log(typeof str);
    console.log(typeof str1);
})()